package br.uece.ativcomplementares.beans;

import java.io.IOException;
import java.io.Serializable;

import javax.annotation.PostConstruct;

import org.primefaces.event.FileUploadEvent;

import br.uece.ativcomplementares.business.AtividadeAlunoBO;
import br.uece.ativcomplementares.business.AtividadeComplementarBO;
import br.uece.ativcomplementares.dao.AtividadeAlunoDao;
import br.uece.ativcomplementares.dao.AtividadeComplementarDao;
import br.uece.ativcomplementares.entity.Aluno;
import br.uece.ativcomplementares.entity.Certificado;
import br.uece.ativcomplementares.entity.atividades.Bolsa;
import br.uece.ativcomplementares.exceptions.BusinessException;
import br.uece.ativcomplementares.utils.CertificadoUtils;

public class BolsaBean extends AbstractBean implements Serializable {

	private static final long serialVersionUID = -8541357128043522063L;
	
	private Bolsa bolsa;
	
	private boolean atualizando;
	
	// Dependências
	AtividadeComplementarBO ativComplementarBO;
	AtividadeAlunoBO atividadeAlunoBO;	
	private Aluno aluno;
	private long codAtividadeComplementar;
	private CertificadoUtils uploadUtils;	

	public BolsaBean() {
		ativComplementarBO = new AtividadeComplementarBO(new AtividadeComplementarDao());
		atividadeAlunoBO = new AtividadeAlunoBO(new AtividadeAlunoDao());
		
		bolsa = new Bolsa();
	}
	
	@PostConstruct
	public void init() {
		clean();
		uploadUtils = new CertificadoUtils(aluno);
	}

	public void load() {
		bolsa.setAtividade(ativComplementarBO.buscaPorCodAtividade(codAtividadeComplementar));
	}
	
	public void clean() {
		bolsa = new Bolsa();
		bolsa.setAluno(aluno);		
		atualizando = false;
	}
	
	public void incluir() {
		atividadeAlunoBO.incluir(bolsa);
		addInfoMessage("atividade_aluno.inclusao");
		clean();
	}
	
	public void atualizar() {
		atividadeAlunoBO.atualizar(bolsa);
		clean();
	}
	
	public void excluir() {
		atividadeAlunoBO.excluir(bolsa);
		clean();
	}
	
	public void handleFileUpload(FileUploadEvent event) throws IOException {
		try {
			uploadUtils.handleFileUpload(bolsa, event);
		} catch (BusinessException e) {
			addErrorMessage(e.getMessage());
		}
	}
	
	public void exibirCertificado(Certificado certificado) throws Exception {
		uploadUtils.downloadCertificado(certificado);
	}
	
	public void removerCertificado(Certificado certificado) {
		bolsa.getCertificados().remove(certificado);
	}
	
	public Bolsa getBolsa() {
		return bolsa;
	}

	public Aluno getAluno() {
		return aluno;
	}

	public void setAluno(Aluno aluno) {
		this.aluno = aluno;
	}

	public boolean isAtualizando() {
		return atualizando;
	}
	
	public long getCodAtividadeComplementar() {
		return codAtividadeComplementar;
	}

	public void setCodAtividadeComplementar(long codAtividadeComplementar) {
		this.codAtividadeComplementar = codAtividadeComplementar;
	}
	
}
